package org.example.rzfx.controller;

import cn.dev33.satoken.annotation.SaCheckRole;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.example.rzfx.dto.Result;
import org.example.rzfx.entity.SysConfig;
import org.example.rzfx.mapper.SysConfigMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * 系统配置控制器
 */
@RestController
@RequestMapping("/api/sys-config")
@CrossOrigin
public class SysConfigController {
    
    @Resource
    private SysConfigMapper sysConfigMapper;
    
    /**
     * 查询所有配置
     */
    @GetMapping("/list")
    @SaCheckRole("1")
    public Result<?> listConfigs() {
        return Result.success(sysConfigMapper.selectList(null));
    }
    
    /**
     * 根据配置键查询
     */
    @GetMapping("/key/{configKey}")
    @SaCheckRole("1")
    public Result<SysConfig> getConfigByKey(@PathVariable String configKey) {
        LambdaQueryWrapper<SysConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysConfig::getConfigKey, configKey);
        SysConfig config = sysConfigMapper.selectOne(wrapper);
        if (config == null) {
            return Result.error("配置不存在");
        }
        return Result.success(config);
    }
    
    /**
     * 获取配置详情
     */
    @GetMapping("/{id}")
    @SaCheckRole("1")
    public Result<SysConfig> getConfigDetail(@PathVariable Long id) {
        SysConfig config = sysConfigMapper.selectById(id);
        if (config == null) {
            return Result.error("配置不存在");
        }
        return Result.success(config);
    }
    
    /**
     * 创建配置（管理员权限）
     */
    @PostMapping("/create")
    @SaCheckRole("1")
    public Result<Void> createConfig(@Valid @RequestBody SysConfig config) {
        // 检查配置键是否已存在
        LambdaQueryWrapper<SysConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysConfig::getConfigKey, config.getConfigKey());
        if (sysConfigMapper.selectCount(wrapper) > 0) {
            return Result.error("配置键已存在");
        }
        sysConfigMapper.insert(config);
        return Result.success("创建成功", null);
    }
    
    /**
     * 更新配置（管理员权限）
     */
    @PutMapping("/update")
    @SaCheckRole("1")
    public Result<Void> updateConfig(@Valid @RequestBody SysConfig config) {
        if (sysConfigMapper.selectById(config.getId()) == null) {
            return Result.error("配置不存在");
        }
        sysConfigMapper.updateById(config);
        return Result.success("更新成功", null);
    }
    
    /**
     * 批量更新配置（管理员权限）
     */
    @PutMapping("/batch-update")
    @SaCheckRole("1")
    public Result<Void> batchUpdateConfigs(@RequestBody java.util.List<SysConfig> configs) {
        for (SysConfig config : configs) {
            sysConfigMapper.updateById(config);
        }
        return Result.success("批量更新成功", null);
    }
    
    /**
     * 删除配置（管理员权限）
     */
    @DeleteMapping("/{id}")
    @SaCheckRole("1")
    public Result<Void> deleteConfig(@PathVariable Long id) {
        sysConfigMapper.deleteById(id);
        return Result.success("删除成功", null);
    }
}

